import { ComponentType } from './componentType';

// 基本列的接口定义
export interface BasicColumn {
  label?: string; // 列的标签
  prop?: string; // 列的属性名
  width?: number; // 列的宽度
  align?: string; // 列的对齐方式
  edit?: boolean; // 是否可编辑
  editRow?: boolean; // 是否编辑整行
  editable?: boolean; // 是否可编辑
  editComponent?: ComponentType; // 编辑组件的类型
  editComponentProps?: Recordable; // 编辑组件的属性
  editRule?: boolean | ((text: string, record: Recordable) => Promise<string>); // 编辑规则
  editValueMap?: (value: any) => string; // 编辑值的映射函数
  onEditRow?: () => void; // 编辑行的回调函数
  auth?: string[]; // 权限编码控制是否显示
  ifShow?: boolean | ((column: BasicColumn) => boolean); // 业务控制是否显示
  editCellRender?: Recordable; // 编辑单元格渲染的函数
  render?: Function; // 单元格渲染的函数
  type?: string; // 列的类型
}

// 表格操作类型的接口定义
export interface TableActionType {
  reload: (opt) => Promise<void>; // 重新加载数据的函数
  emit?: any; // 发射事件的函数
  getColumns: (opt?) => BasicColumn[]; // 获取列的函数
  setColumns: (columns: BasicColumn[] | string[]) => void; // 设置列的函数
  redoHeight: () => void; // 重新计算表格高度的函数
}

// 表格设置的接口定义
export interface TableSetting {
  width?: number; // 表格宽度
  redo?: boolean; // 是否可重做
  size?: boolean; // 是否可调整大小
  setting?: boolean; // 是否可设置
  fullscreen?: boolean; // 是否全屏
  striped?: boolean; // 是否显示斑马纹
  query?: boolean; // 是否显示查询
}

// 基本表格属性的接口定义
export interface BasicTableProps {
  title?: string; // 表格标题
  dataSource?: Function | any[]; // 数据源
  columns: any[]; // 列定义数组
  pagination?: object; // 分页配置对象
  showPagination?: boolean; // 是否显示分页
  actionColumn?: object; // 操作列配置对象
  canResize?: boolean; // 是否可调整大小
  resizeHeightOffset?: number; // 调整高度的偏移量
  loading?: boolean; // 加载状态
  showTableSetting?: boolean; // 是否显示表格设置
  tableSetting?: TableSetting; // 表格设置对象
  titleTooltip?: string; // 表格标题的提示文本
  striped?: boolean; // 是否显示斑马纹
  request?: Function; // 请求数据的函数
  isKeepRowKeys?: boolean; // 是否保留行键
}
